package com.boot.common.utils;


import lombok.extern.slf4j.Slf4j;

import javax.servlet.http.HttpServletRequest;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @author Cheng JiYe
 * @description:
 * @date 2020/10/2 1:24
 */
@Slf4j
public class RequestMap {
    public static Map<String, String> requestToMap(HttpServletRequest req) {
        Map<String, String> map = new HashMap<>(20);

        //request.getParameterMap()返回的是一个Map类型的值，
        // 该返回值记录着前端（如jsp页面）所提交请求中的请求参数和请求参数值的映射关系。这个返回值有个特别之处——只能读。
        Map parameterMap = req.getParameterMap();

        //Map.Entry是Map声明的一个内部接口，此接口为泛型，定义为Entry。
        // 它表示Map中的一个实体（一个key-value对）。接口中有getKey(),getValue方法。
        Iterator<Map.Entry<String, Object>> it = parameterMap.entrySet().iterator();

        while (it.hasNext()) {
            Map.Entry<String, Object> en = it.next();
            String value = req.getParameter(en.getKey());
            try {
                // URLDecoder.decode(value, "utf-8") //value
                map.put(en.getKey(), URLDecoder.decode(value, "utf-8"));
            } catch (Exception e) {
                e.printStackTrace();
                log.error(e.toString());
                
            }
        }
        return map;
    }
}
